//
//  线性表.cpp
//  408数据结构
//
//  Created by Cai Yuanhao on 2022/3/25.
//

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define InitSize 50
typedef int ElemType;
//直接分配内存写法：
//typedef struct SqList{
//    ElemType data[MAXSIZE];
//    int length;
//}SqList;


//动态分配内存方法
typedef struct SqList{
    ElemType *data;
    int length,Maxsize;
}SeqList;


//初始化，仅动态内存分配需要
void initSeqList(SqList &L,int initSize,int Maxisze){
//C语言    L.data=(ElemType*)malloc(sizeof(ElemType)*initSize);
//C++：
    L.Maxsize=Maxisze;
    L.data=new ElemType(InitSize);
    L.length=0;
}

bool ListInsert(SeqList &L,int i,ElemType e){
//    在顺序表的第i位插入元素e
    if(i<1||i>L.length+1)
        return false;
    if (L.length>=MAXSIZE) {
        return false;
    }
    for (int j=L.length; j>=i; j--) {
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=e;
    L.length++;
    return true;
}

//删除操作
bool ListDelete(SeqList &l,int i,ElemType &e){
    if (i<1||i>l.length) {
        return  false;
    }
    e=l.data[i-1];
    for (int j=i; j<l.length; j++) {
        l.data[j-1]=l.data[j];
    }
    l.length--;
    return true;
}

//按值查找，返回位序
ElemType locateElem(SeqList L,ElemType e){
    int i;
    for (i=0; i<L.length; i++) {
        if (L.data[i]==e) {
            return i+1;
        }
    }
    return NULL;
}

void PrintList(SeqList L){
    for (int i = 0; i<L.length; i++) {
        printf("%d ",L.data[i]);
    }
    printf("\n");
}


